import Axios from 'axios'
import store from '@/store'
import router from '@/router'
// 2 创建案axios实例
const axios = Axios.create({
  // baseURL: 'http://geek.itheima.net',
  baseURL: 'http://toutiao.itheima.net',
  // 设置超时时间
  timeout: 20000
})
/* const axios = new Axios({  // 拿到所有的东西
  baseURL: 'http://geek.itheima.net',
  // 设置超时时间
  timeout: 20000
}) */
// 调用的时候 暴露出去的函数  axios() 会传入一个对象  相当于结构赋值   不用对象也可以 用对象  就不需要一一对应
export default ({ url, method = 'GET', params, data, headers }) => {
  return axios({
    url, method, params, data, headers
  })
}

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 看有没有token 再看请求 config.headers.Authorization 是不是为undefined
    if (
      store.state.token.length > 0 &&
      config.headers.Authorization === undefined
    ) {
      config.headers.Authorization = 'Bearer ' + store.state.token
      // 后续接口就不需要 在传 headers
    }
    return config
  },
  async function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, function (error) {
  // 对响应错误做点什么
  // error.response.status 401没有响应头 或者失效
  // console.dir(error)
  if (error.response.status === 401) {
    // 把之前的 无效token清空
    store.commit('setToken', '')
    router.push({
      path: '/login'
    })
  }

  return Promise.reject(error)
})
